home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1833 / 1833.xpi / chrome / yoono.jar / content / yoono / sidebar.js < prev    next >
Text File  |  2009-12-16  |  6KB  |  185 lines

  1. /*************************************************
  2.  *       This is loaded in the main xul document 
  3.  *************************************************/
  4.  
  5. const YOONO_ID = "{d9284e50-81fc-11da-a72b-0800200c9a66}";
  6. const YOONO_WMED = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
  7.  
  8.  
  9. /*
  10.  * This class, defined here, is enriched in sidebarPanel.js
  11.  * An instance is created when FF is started, and kept session-wide
  12.  * However, the init method of the instance is called each time the sidebar is opened
  13.  * the init method is defined in sidebarPanel.js, which is loaded 
  14.  * in the sidebarPanel.xul document loaded when the sidebar is opened
  15.  */
  16. function YoonoSidebar(externalInterfaces) {
  17.   try {
  18.     var _self = this;
  19.     this.visible = false; // sidebar visible or not, this flag is handled by xul document loading and unloading...
  20.     this.container = document.getElementById('yoono-sidebar-box');
  21.     this.browser = document.getElementById('yoono-sidebar');
  22.     // Get the skin chosen by user
  23.     var skinName = YNPREFBRANCH.getCharPref("skin");
  24.  
  25.     this.browser.setAttribute('skin', skinName);
  26.  
  27.     this.splitter = document.getElementById('yoono-splitter');
  28.     // define services made available to external calls
  29.     this.externalInterfaces = externalInterfaces;
  30.     this.methods = externalInterfaces.methods;
  31.     // at startup, sidebar might be opened because it was last time
  32.     // In order for everything to be ready, the sidebar browser is loaded just now
  33.     this.showIfVisible();
  34.     // Init splitter movement detection
  35.     if(this.splitter) {
  36.       this.splitter.addEventListener('mousedown', function(evt) {_self.splitterMouseDown(evt)}, false);
  37.       
  38.     }
  39.     this.resizing = false;
  40.     this.thin = false;
  41.   } catch(e) {
  42.     YOONO_LOG.exception(e);
  43.   }
  44. }
  45.  
  46. YoonoSidebar.prototype.splitterMouseDown = function(evt) {
  47.   
  48.   var _self = this;
  49.   
  50.   var initialWidth = parseInt(this.browser.parentNode.getAttribute('width'));
  51.   var initialX = evt.screenX;
  52.   var previousX = evt.clientX;
  53.   
  54.   function mouseUp(evt) {
  55.     YOONO_LOG.debug('YoonoSidebar.splitterMouseUp');
  56.     document.removeEventListener('mouseup', mouseUp, true);
  57.     document.removeEventListener('mousemove', mouseMove, true);
  58.   }
  59.   
  60.   function mouseMove(evt) {
  61.     var direction = (evt.clientX > previousX)?'right':'left';
  62.     previousX = evt.clientX;
  63.     
  64.     var diffX=evt.screenX - initialX;
  65.     
  66.     var width = initialWidth+diffX;
  67.     if(width >= 700) return;
  68.     //dump("mouse move -- resize --> "+width+" - "+direction+"\n");
  69.     
  70.     if ('ynSidebar' in _self.win) {
  71.       width = _self.win.ynSidebar.getResizeWidth(width, direction);
  72.     }
  73.     
  74.     _self.browser.parentNode.setAttribute('width',width);
  75.   }
  76.   
  77.   YOONO_LOG.debug('YoonoSidebar.splitterMouseDown with ' + initialWidth);
  78.   document.addEventListener('mouseup', mouseUp, true);
  79.   document.addEventListener('mousemove', mouseMove, true);
  80. }
  81.  
  82. YoonoSidebar.prototype.toggleThin = function(thinWidth) {
  83.   if(this.thin) {
  84.     this.win.ynSidebar.setLarge();
  85.   } else {
  86.     this.win.ynSidebar.setThin(false);
  87.   }
  88. }
  89.  
  90. YoonoSidebar.prototype.setThin = function(thinWidth) {
  91.   this.thin = true;
  92.   YOONO_LOG.debug('YoonoSidebar.setThin');
  93.   this.browser.parentNode.setAttribute('class', 'sidebar thin');
  94.   this.browser.parentNode.setAttribute('width', thinWidth);
  95. }
  96.  
  97. YoonoSidebar.prototype.setLarge = function(largeWidth) {
  98.   this.thin = false;
  99.   this.browser.parentNode.setAttribute('class', 'sidebar large');
  100.   YOONO_LOG.debug('YoonoSidebar.setLarge');
  101.   this.browser.parentNode.setAttribute('width', largeWidth);
  102. }
  103.  
  104. YoonoSidebar.prototype.showManageBookmarks = function() {
  105.   var userCredential = YOONO_CMPT.getUserCredential();
  106.   if(!this.visible ||┬á!this.win.ynSidebar || !userCredential || userCredential.anonymous) {
  107.     alert(yoonoGlob.gStrbundle.getString('bkms.open.sidebar'));
  108.     return;
  109.   }
  110.   this.win.ynSidebar.showManageBookmarks();
  111. }
  112.  
  113. YoonoSidebar.prototype.isVisible = function() {
  114.   return(this.visible); // flag handled by the loading/unloading of the xul sidebar document
  115. }
  116.  
  117. /**
  118.  * check if sidebar was visible last time 
  119.  * and open the sidebar accordingly
  120.  */
  121. YoonoSidebar.prototype.showIfVisible = function() {
  122.   if(!this.container) return;
  123.   var hidden = this.container.getAttribute('hidden');
  124.   // Open the sidebar if updated or it was opened last time
  125.   if(yoonoGlob.firstReleaseRun || ('true' != hidden)) {
  126.     this.show();
  127.   }
  128. }
  129.  
  130. YoonoSidebar.prototype.show = function() {
  131.   if(!yoonoGlob.tosAccepted) {
  132.     this.loadTOSXulDoc();
  133.     return;
  134.   }
  135.   
  136.   if(!this.container) return;
  137.   YOONO_CMPT.addStat(['sidebar', 'open'])
  138.   this.container.removeAttribute('hidden');
  139.   this.splitter.removeAttribute('hidden');
  140.   this.loadSidebarXulDoc();
  141. }
  142.  
  143. YoonoSidebar.prototype.loadTOSXulDoc = function() {
  144.   YOONO_LOG.debug('YoonoSidebar.show displaying TOS');
  145.   var sbUrl = 'chrome://yoono/content/TOSPanel.xul';
  146.   this.browser.parentNode.setAttribute("class", "tos");
  147.   this.browser.parentNode.setAttribute("style","max-width:300px;");
  148.   this.browser.parentNode.setAttribute("style","min-width:100px;");
  149.   this.browser.setAttribute('src', sbUrl);
  150.   this.container.removeAttribute('hidden');
  151.   this.splitter.removeAttribute('hidden');
  152. }
  153.  
  154. YoonoSidebar.prototype.loadSidebarXulDoc = function() {
  155.   YOONO_LOG.debug('YoonoSidebar.show displaying Sidebar');
  156.   var sbUrl = 'chrome://yoono/content/sidebarPanel.xul';
  157.   this.browser.parentNode.setAttribute("style","max-width:0px;");
  158.   this.browser.parentNode.setAttribute("class", "sidebar");
  159.   this.browser.setAttribute('src', sbUrl);
  160. }
  161.  
  162. YoonoSidebar.prototype.hide = function() {
  163.   YOONO_LOG.debug('YoonoSidebar.hide');
  164.   if (this.uninit)
  165.     this.uninit(); // this method is defined in sidebarPanel.js
  166.   if(this.container) {
  167.     this.container.setAttribute('hidden', true);
  168.     this.splitter.setAttribute('hidden', true);
  169.   }
  170.   this.browser.setAttribute('src', '');
  171. }
  172.  
  173.  
  174. YoonoSidebar.prototype.toggle = function() {
  175.   YOONO_LOG.debug('YoonoSidebar.toggle : ' + this.visible);
  176.   var hidden = this.container.getAttribute('hidden') || false ;
  177.   if(hidden) {
  178.     this.show();
  179.   } else {
  180.     this.hide();
  181.   }
  182.   return(!hidden);
  183. }
  184.  
  185.